{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Convolutional & Denoising Autoencoders"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The insights from Chapter 17, Convolutional Neural Networks, suggest we incorporate convolutional layers into the autoencoder to extract information characteristic of the grid-like structure of image data."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Source: https://blog.keras.io/building-autoencoders-in-keras.html"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Imports & Settings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T02:47:48.651866Z",
     "start_time": "2020-06-22T02:47:46.795252Z"
    },
    "slideshow": {
     "slide_type": "skip"
    }
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "\n",
    "from pathlib import Path\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "from numpy.random import choice\n",
    "\n",
    "import tensorflow as tf\n",
    "from tensorflow.keras.layers import Input, Conv2D, MaxPooling2D, UpSampling2D\n",
    "from tensorflow.keras.models import Model\n",
    "from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint\n",
    "from tensorflow.keras.datasets import fashion_mnist\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T02:47:48.685268Z",
     "start_time": "2020-06-22T02:47:48.653592Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Using GPU\n"
     ]
    }
   ],
   "source": [
    "gpu_devices = tf.config.experimental.list_physical_devices('GPU')\n",
    "if gpu_devices:\n",
    "    print('Using GPU')\n",
    "    tf.config.experimental.set_memory_growth(gpu_devices[0], True)\n",
    "else:\n",
    "    print('Using CPU')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T02:47:48.709819Z",
     "start_time": "2020-06-22T02:47:48.686817Z"
    }
   },
   "outputs": [],
   "source": [
    "n_classes = 10 # all examples have 10 classes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T02:47:48.718815Z",
     "start_time": "2020-06-22T02:47:48.711084Z"
    }
   },
   "outputs": [],
   "source": [
    "sns.set_style('white')\n",
    "cmap = sns.color_palette('Paired', n_classes)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T02:47:48.726776Z",
     "start_time": "2020-06-22T02:47:48.720302Z"
    }
   },
   "outputs": [],
   "source": [
    "results_path = Path('results', 'fashion_mnist')\n",
    "if not results_path.exists():\n",
    "    results_path.mkdir(parents=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Fashion MNIST Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T02:47:49.089272Z",
     "start_time": "2020-06-22T02:47:48.730364Z"
    }
   },
   "outputs": [],
   "source": [
    "(X_train, y_train), (X_test, y_test) = fashion_mnist.load_data()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T02:47:49.098871Z",
     "start_time": "2020-06-22T02:47:49.092813Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((60000, 28, 28), (10000, 28, 28))"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train.shape, X_test.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T02:47:49.109197Z",
     "start_time": "2020-06-22T02:47:49.100666Z"
    }
   },
   "outputs": [],
   "source": [
    "class_dict = {0: 'T-shirt/top',\n",
    "              1: 'Trouser',\n",
    "              2: 'Pullover',\n",
    "              3: 'Dress',\n",
    "              4: 'Coat',\n",
    "              5: 'Sandal',\n",
    "              6: 'Shirt',\n",
    "              7: 'Sneaker',\n",
    "              8: 'Bag',\n",
    "              9: 'Ankle boot'}\n",
    "classes = list(class_dict.keys())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "## Reshape & normalize Fashion MNIST data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T02:47:49.117191Z",
     "start_time": "2020-06-22T02:47:49.110944Z"
    }
   },
   "outputs": [],
   "source": [
    "image_size = 28"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T02:47:49.128063Z",
     "start_time": "2020-06-22T02:47:49.118571Z"
    }
   },
   "outputs": [],
   "source": [
    "def data_prep_conv(x, size=image_size):\n",
    "    return x.reshape(-1, size, size, 1).astype('float32')/255"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T02:47:49.193558Z",
     "start_time": "2020-06-22T02:47:49.130346Z"
    }
   },
   "outputs": [],
   "source": [
    "X_train_scaled = data_prep_conv(X_train)\n",
    "X_test_scaled = data_prep_conv(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T02:47:49.198434Z",
     "start_time": "2020-06-22T02:47:49.195133Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((60000, 28, 28, 1), (10000, 28, 28, 1))"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train_scaled.shape, X_test_scaled.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Combine training steps into function"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T02:47:49.210170Z",
     "start_time": "2020-06-22T02:47:49.199635Z"
    }
   },
   "outputs": [],
   "source": [
    "def train_autoencoder(path, model, x_train=X_train_scaled, x_test=X_test_scaled):\n",
    "    callbacks = [EarlyStopping(patience=5, restore_best_weights=True),\n",
    "                 ModelCheckpoint(filepath=path, save_best_only=True, save_weights_only=True)]\n",
    "    model.fit(x=x_train, y=x_train, epochs=100, validation_split=.1, callbacks=callbacks)\n",
    "    model.load_weights(path)\n",
    "    mse = model.evaluate(x=x_test, y=x_test)\n",
    "    return model, mse"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Convolutional Autoencoder"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We define a three-layer encoder that uses 2D convolutions with 32, 16, and 8 filters, respectively, ReLU activations, and 'same' padding to maintain the input size. The resulting encoding size at the third layer is 4 x 4 x 8 = 128, higher than for the preceding examples:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3-dim input"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T02:47:49.224451Z",
     "start_time": "2020-06-22T02:47:49.212694Z"
    }
   },
   "outputs": [],
   "source": [
    "input_ = Input(shape=(28, 28, 1), name='Input_3D')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Encoding Layers"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T02:47:49.866966Z",
     "start_time": "2020-06-22T02:47:49.225968Z"
    }
   },
   "outputs": [],
   "source": [
    "x = Conv2D(filters=32,\n",
    "           kernel_size=(3, 3),\n",
    "           activation='relu',\n",
    "           padding='same',\n",
    "           name='Encoding_Conv_1')(input_)\n",
    "x = MaxPooling2D(pool_size=(2, 2), padding='same', name='Encoding_Max_1')(x)\n",
    "x = Conv2D(filters=16,\n",
    "           kernel_size=(3, 3),\n",
    "           activation='relu',\n",
    "           padding='same',\n",
    "           name='Encoding_Conv_2')(x)\n",
    "x = MaxPooling2D(pool_size=(2, 2), padding='same', name='Encoding_Max_2')(x)\n",
    "x = Conv2D(filters=8,\n",
    "           kernel_size=(3, 3),\n",
    "           activation='relu',\n",
    "           padding='same',\n",
    "           name='Encoding_Conv_3')(x)\n",
    "encoded_conv = MaxPooling2D(pool_size=(2, 2),\n",
    "                            padding='same',\n",
    "                            name='Encoding_Max_3')(x)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We also define a matching decoder that reverses the number of filters and uses 2D upsampling instead of max pooling to reverse the reduction of the filter sizes. The three-layer autoencoder has 12,785 parameters, a little more than 5% of the capacity of the preceding deep autoencoder."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T02:47:49.927036Z",
     "start_time": "2020-06-22T02:47:49.868339Z"
    }
   },
   "outputs": [],
   "source": [
    "x = Conv2D(filters=8,\n",
    "           kernel_size=(3, 3),\n",
    "           activation='relu',\n",
    "           padding='same',\n",
    "           name='Decoding_Conv_1')(encoded_conv)\n",
    "x = UpSampling2D(size=(2, 2), name='Decoding_Upsample_1')(x)\n",
    "x = Conv2D(filters=16,\n",
    "           kernel_size=(3, 3),\n",
    "           activation='relu',\n",
    "           padding='same',\n",
    "           name='Decoding_Conv_2')(x)\n",
    "x = UpSampling2D(size=(2, 2), name='Decoding_Upsample_2')(x)\n",
    "x = Conv2D(filters=32,\n",
    "           kernel_size=(3, 3),\n",
    "           activation='relu',\n",
    "           name='Decoding_Conv_3')(x)\n",
    "x = UpSampling2D(size=(2, 2), name='Decoding_Upsample_3')(x)\n",
    "decoded_conv = Conv2D(filters=1,\n",
    "                      kernel_size=(3, 3),\n",
    "                      activation='sigmoid',\n",
    "                      padding='same',\n",
    "                      name='Decoding_Conv_4')(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T02:47:49.941728Z",
     "start_time": "2020-06-22T02:47:49.928361Z"
    }
   },
   "outputs": [],
   "source": [
    "autoencoder_conv = Model(input_, decoded_conv)\n",
    "autoencoder_conv.compile(optimizer='adam', loss='mse')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T02:47:49.957370Z",
     "start_time": "2020-06-22T02:47:49.946722Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"model\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "Input_3D (InputLayer)        [(None, 28, 28, 1)]       0         \n",
      "_________________________________________________________________\n",
      "Encoding_Conv_1 (Conv2D)     (None, 28, 28, 32)        320       \n",
      "_________________________________________________________________\n",
      "Encoding_Max_1 (MaxPooling2D (None, 14, 14, 32)        0         \n",
      "_________________________________________________________________\n",
      "Encoding_Conv_2 (Conv2D)     (None, 14, 14, 16)        4624      \n",
      "_________________________________________________________________\n",
      "Encoding_Max_2 (MaxPooling2D (None, 7, 7, 16)          0         \n",
      "_________________________________________________________________\n",
      "Encoding_Conv_3 (Conv2D)     (None, 7, 7, 8)           1160      \n",
      "_________________________________________________________________\n",
      "Encoding_Max_3 (MaxPooling2D (None, 4, 4, 8)           0         \n",
      "_________________________________________________________________\n",
      "Decoding_Conv_1 (Conv2D)     (None, 4, 4, 8)           584       \n",
      "_________________________________________________________________\n",
      "Decoding_Upsample_1 (UpSampl (None, 8, 8, 8)           0         \n",
      "_________________________________________________________________\n",
      "Decoding_Conv_2 (Conv2D)     (None, 8, 8, 16)          1168      \n",
      "_________________________________________________________________\n",
      "Decoding_Upsample_2 (UpSampl (None, 16, 16, 16)        0         \n",
      "_________________________________________________________________\n",
      "Decoding_Conv_3 (Conv2D)     (None, 14, 14, 32)        4640      \n",
      "_________________________________________________________________\n",
      "Decoding_Upsample_3 (UpSampl (None, 28, 28, 32)        0         \n",
      "_________________________________________________________________\n",
      "Decoding_Conv_4 (Conv2D)     (None, 28, 28, 1)         289       \n",
      "=================================================================\n",
      "Total params: 12,785\n",
      "Trainable params: 12,785\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "autoencoder_conv.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T02:47:49.961870Z",
     "start_time": "2020-06-22T02:47:49.959474Z"
    }
   },
   "outputs": [],
   "source": [
    "path = (results_path / 'autencoder_conv.32.weights.hdf5').as_posix()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T02:57:29.447140Z",
     "start_time": "2020-06-22T02:47:49.963455Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/100\n",
      "1688/1688 [==============================] - 8s 5ms/step - loss: 0.0230 - val_loss: 0.0177\n",
      "Epoch 2/100\n",
      "1688/1688 [==============================] - 8s 5ms/step - loss: 0.0156 - val_loss: 0.0146\n",
      "Epoch 3/100\n",
      "1688/1688 [==============================] - 8s 5ms/step - loss: 0.0140 - val_loss: 0.0135\n",
      "Epoch 4/100\n",
      "1688/1688 [==============================] - 8s 5ms/step - loss: 0.0131 - val_loss: 0.0126\n",
      "Epoch 5/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0124 - val_loss: 0.0124\n",
      "Epoch 6/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0119 - val_loss: 0.0115\n",
      "Epoch 7/100\n",
      "1688/1688 [==============================] - 8s 5ms/step - loss: 0.0115 - val_loss: 0.0113\n",
      "Epoch 8/100\n",
      "1688/1688 [==============================] - 9s 5ms/step - loss: 0.0112 - val_loss: 0.0111\n",
      "Epoch 9/100\n",
      "1688/1688 [==============================] - 8s 4ms/step - loss: 0.0110 - val_loss: 0.0109\n",
      "Epoch 10/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0107 - val_loss: 0.0109\n",
      "Epoch 11/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0106 - val_loss: 0.0105\n",
      "Epoch 12/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0104 - val_loss: 0.0105\n",
      "Epoch 13/100\n",
      "1688/1688 [==============================] - 8s 5ms/step - loss: 0.0103 - val_loss: 0.0104\n",
      "Epoch 14/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0102 - val_loss: 0.0101\n",
      "Epoch 15/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0101 - val_loss: 0.0100\n",
      "Epoch 16/100\n",
      "1688/1688 [==============================] - 8s 5ms/step - loss: 0.0099 - val_loss: 0.0102\n",
      "Epoch 17/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0099 - val_loss: 0.0102\n",
      "Epoch 18/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0098 - val_loss: 0.0097\n",
      "Epoch 19/100\n",
      "1688/1688 [==============================] - 8s 5ms/step - loss: 0.0097 - val_loss: 0.0096\n",
      "Epoch 20/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0096 - val_loss: 0.0096\n",
      "Epoch 21/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0095 - val_loss: 0.0095\n",
      "Epoch 22/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0095 - val_loss: 0.0095\n",
      "Epoch 23/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0094 - val_loss: 0.0097\n",
      "Epoch 24/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0094 - val_loss: 0.0093\n",
      "Epoch 25/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0093 - val_loss: 0.0094\n",
      "Epoch 26/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0092 - val_loss: 0.0093\n",
      "Epoch 27/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0092 - val_loss: 0.0091\n",
      "Epoch 28/100\n",
      "1688/1688 [==============================] - 8s 5ms/step - loss: 0.0091 - val_loss: 0.0091\n",
      "Epoch 29/100\n",
      "1688/1688 [==============================] - 8s 5ms/step - loss: 0.0091 - val_loss: 0.0091\n",
      "Epoch 30/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0090 - val_loss: 0.0092\n",
      "Epoch 31/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0090 - val_loss: 0.0090\n",
      "Epoch 32/100\n",
      "1688/1688 [==============================] - 8s 5ms/step - loss: 0.0090 - val_loss: 0.0090\n",
      "Epoch 33/100\n",
      "1688/1688 [==============================] - 9s 5ms/step - loss: 0.0089 - val_loss: 0.0090\n",
      "Epoch 34/100\n",
      "1688/1688 [==============================] - 9s 5ms/step - loss: 0.0089 - val_loss: 0.0089\n",
      "Epoch 35/100\n",
      "1688/1688 [==============================] - 8s 5ms/step - loss: 0.0089 - val_loss: 0.0088\n",
      "Epoch 36/100\n",
      "1688/1688 [==============================] - 8s 5ms/step - loss: 0.0088 - val_loss: 0.0089\n",
      "Epoch 37/100\n",
      "1688/1688 [==============================] - 8s 5ms/step - loss: 0.0088 - val_loss: 0.0089\n",
      "Epoch 38/100\n",
      "1688/1688 [==============================] - 9s 5ms/step - loss: 0.0088 - val_loss: 0.0087\n",
      "Epoch 39/100\n",
      "1688/1688 [==============================] - 8s 5ms/step - loss: 0.0087 - val_loss: 0.0090\n",
      "Epoch 40/100\n",
      "1688/1688 [==============================] - 8s 5ms/step - loss: 0.0087 - val_loss: 0.0091\n",
      "Epoch 41/100\n",
      "1688/1688 [==============================] - 8s 5ms/step - loss: 0.0087 - val_loss: 0.0089\n",
      "Epoch 42/100\n",
      "1688/1688 [==============================] - 8s 5ms/step - loss: 0.0087 - val_loss: 0.0088\n",
      "Epoch 43/100\n",
      "1688/1688 [==============================] - 8s 5ms/step - loss: 0.0086 - val_loss: 0.0086\n",
      "Epoch 44/100\n",
      "1688/1688 [==============================] - 8s 5ms/step - loss: 0.0086 - val_loss: 0.0088\n",
      "Epoch 45/100\n",
      "1688/1688 [==============================] - 8s 5ms/step - loss: 0.0086 - val_loss: 0.0087\n",
      "Epoch 46/100\n",
      "1688/1688 [==============================] - 8s 5ms/step - loss: 0.0086 - val_loss: 0.0086\n",
      "Epoch 47/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0086 - val_loss: 0.0085\n",
      "Epoch 48/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0085 - val_loss: 0.0086\n",
      "Epoch 49/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0085 - val_loss: 0.0088\n",
      "Epoch 50/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0085 - val_loss: 0.0087\n",
      "Epoch 51/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0085 - val_loss: 0.0085\n",
      "Epoch 52/100\n",
      "1688/1688 [==============================] - 8s 4ms/step - loss: 0.0085 - val_loss: 0.0085\n",
      "Epoch 53/100\n",
      "1688/1688 [==============================] - 8s 5ms/step - loss: 0.0084 - val_loss: 0.0085\n",
      "Epoch 54/100\n",
      "1688/1688 [==============================] - 8s 5ms/step - loss: 0.0084 - val_loss: 0.0085\n",
      "Epoch 55/100\n",
      "1688/1688 [==============================] - 8s 5ms/step - loss: 0.0084 - val_loss: 0.0086\n",
      "Epoch 56/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0084 - val_loss: 0.0085\n",
      "Epoch 57/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0084 - val_loss: 0.0084\n",
      "Epoch 58/100\n",
      "1688/1688 [==============================] - 8s 5ms/step - loss: 0.0084 - val_loss: 0.0084\n",
      "Epoch 59/100\n",
      "1688/1688 [==============================] - 9s 5ms/step - loss: 0.0083 - val_loss: 0.0084\n",
      "Epoch 60/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0083 - val_loss: 0.0087\n",
      "Epoch 61/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0083 - val_loss: 0.0088\n",
      "Epoch 62/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0083 - val_loss: 0.0088\n",
      "Epoch 63/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0083 - val_loss: 0.0084\n",
      "Epoch 64/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0083 - val_loss: 0.0083\n",
      "Epoch 65/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0083 - val_loss: 0.0082\n",
      "Epoch 66/100\n",
      "1688/1688 [==============================] - 8s 5ms/step - loss: 0.0082 - val_loss: 0.0083\n",
      "Epoch 67/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0082 - val_loss: 0.0082\n",
      "Epoch 68/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0082 - val_loss: 0.0083\n",
      "Epoch 69/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0082 - val_loss: 0.0083\n",
      "Epoch 70/100\n",
      "1688/1688 [==============================] - 8s 5ms/step - loss: 0.0082 - val_loss: 0.0082\n",
      "Epoch 71/100\n",
      "1688/1688 [==============================] - 8s 5ms/step - loss: 0.0082 - val_loss: 0.0082\n",
      "Epoch 72/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0082 - val_loss: 0.0086\n",
      "Epoch 73/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0082 - val_loss: 0.0082\n",
      "Epoch 74/100\n",
      "1688/1688 [==============================] - 7s 4ms/step - loss: 0.0082 - val_loss: 0.0082\n",
      "Epoch 75/100\n",
      "1688/1688 [==============================] - 8s 4ms/step - loss: 0.0081 - val_loss: 0.0083\n",
      "313/313 [==============================] - 1s 2ms/step - loss: 0.0082\n"
     ]
    }
   ],
   "source": [
    "autoencoder_deep, mse = train_autoencoder(path, \n",
    "                                          autoencoder_conv, \n",
    "                                          x_train=X_train_scaled, \n",
    "                                          x_test=X_test_scaled)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Training stops after 75 epochs and results in a further 9% reduction of the test RMSE, due to a combination of the ability of convolutional filters to learn more efficiently from image data and the larger encoding size."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T02:57:29.463299Z",
     "start_time": "2020-06-22T02:57:29.452721Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'MSE: 0.0082 | RMSE 0.0905'"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f'MSE: {mse:.4f} | RMSE {mse**.5:.4f}'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T02:57:29.491041Z",
     "start_time": "2020-06-22T02:57:29.468776Z"
    }
   },
   "outputs": [],
   "source": [
    "autoencoder_conv.load_weights(path)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T02:57:30.008107Z",
     "start_time": "2020-06-22T02:57:29.492777Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(10000, 28, 28, 1)"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "reconstructed_images = autoencoder_deep.predict(X_test_scaled)\n",
    "reconstructed_images.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T02:57:32.423988Z",
     "start_time": "2020-06-22T02:57:30.010508Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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n7J6r3nNa5K90047ZWX6ed26dcm+7LLLsno6ZrY07TAXdZ3s169fsg8++OCs3stf/vJk//a3v032n//856yezrddd901K3vqqaeSfeuttyZ72bJlWb2//vWvLT375qBd5qLe++KLL072AQcckNXT76tr5e9+97usnvaB75nbb799snVNfeyxx7J6H/7wh7u83pagHeai3vvAAw9Mdp8+fbJ6uobqWviyl+XHb11PX/GKV2Rlep75wx/+sIlPvHlpl7lYwufRu9/97mQfe+yxydZ+i4jYY489kv3II49kZW9/+9uTvTX3vhrtMBc7nXafi51CqR/xqAEAAAAAAAAAaAi8qAEAAAAAAAAAaAgv+VvFZwoXqG1Hd3JlUxfeM844Iyt74xvfmOxBgwYle/DgwVk9lcqoy6m6+r8Q2mbr169P9sSJE7N6X/va15I9f/784jU2B+3mVnrnnXcm29301V1epRcuPdM+dTmNXkNlbu9973uzepdffvnGPPaLojvNxRqf+9znkv2hD30o2S6j0Ln4qle9Ktk1OYRfQ1381TX8lFNOyerdf//9L/DUm4/uOBddUnbCCSckW9ty2LBhWb0999wz2bvsskuyfb7p2q0SqYiIJUuWJHvu3LnJvueee7J6KotSiUbE88fFi6Vd5qL2q0rJXG6hqBzG56K2i/exSmXU9nV53333TfaTTz5ZfI7NQXeci85ee+2V7B/96EfJ3m233bJ6Kj3z+ayoFGb27NlZ2QUXXJDsa665JtlbU3botMtcVPRs4mfUK6+8MtkjRoxIts83lSiqfDQi4m1ve1uyJ02alOw//vGPm/jEL552mIudTjvOxU4E6RMAAAAAAAAAQMPhRQ0AAAAAAAAAQEPgRQ0AAAAAAAAAQEOopucG6Ipzzz03+3zRRRcl29Mtq+aupn1Ubb7Wc82eppf1NJUab0HjbHhq53POOSfZ06ZNy8o0BoRrjzsV7ZsBAwYk2/XxGvNAtd61PnRttur0dRzss88+G/vYHY/PN41bovFIFi1alNXr27dvsnv16pVs70ftb41JE5HH3dh5552TPXLkyKze1oxR01Q8Lomm2j7ttNOyMk2hre0/ZcqUrN7q1auTPXTo0GT7fNPPnnZb4yvoWDrqqKOyekcccUSyPdX7jTfemOyrrroq2dsytkYT0PgmulZq+uyIfM5prBOfi9o/3sdPP/10snV97dGjR1Zv+PDhyZ46dWr9C3QgHi/v1FNPTba2v8e903TdGq/L54D209KlS7My7XuNG7a5Y0B1Ahr7LiJi9913T7buT7puRkQsXrw42Tr/nn322ayejhM960Tkab01dtgTTzyR1XvooYeK1weAzgKPGgAAAAAAAACAhsCLGgAAAAAAAACAhoD0CVriDW94Q7K/9KUvZWU77LBDst2dVz+r7bIidR1WKYBf75lnnkm2u4SW0gq7tEBTRx9yyCFZ2aWXXprss88+OyB3kVcpjKd31c/axt7+2qe1MnUbHjhw4MY+dsfj0id1yVapkrtnP/fcc8lWqYT3lfa3z8VVq1YlW+f6q1/96paevZNwedNrX/vaZHvfqKRJ+1PnW0QubVNJk48J7WuXr2n/qmTDUzerBFVlbhER73//+7t89ttuuy06mde//vXJ1jXP11RNya3SXpfhKDWJsd7Lx0zv3r0rTwwqkYnIJTQzZ85Mtp5RIvK5o2uhr5k6r3wuqtSmZ8+eyfbxorK3zZmyt7uhUrGIPJ322LFjszJtT50TvvauXLmyy3v5fNM55tI07WN9xtGjR2f1VGLu8nyVSXW6hLSTIY1254BHDQAAAAAAAABAQ+BFDQAAAAAAAABAQ+BFDQAAAAAAAABAQyBGDRRRDeRnPvOZZNfixrhmWuMX1LT4pRg1Xk9Txmr8jIhc/61aY6+32267JVv14xERxx9/fLI13oLet9PQ9lJdvmvstZ1r8RRUO+9jSWMyaB+qjhw2DdXcawwZ7wOds9rHHtOiloa0FL9m/fr1G/vYbUm/fv2SfeaZZ2ZlGsfA48FoH+hc9HVM0TgJHmdIY1ronHX87xR9Dh9Luq6ffvrpye70GDXjx49Ptu5bOvci8v7RtvS5qGXeB3oNnZceJ87ncCfie9U+++yT7IMOOigr0zhQjz/+eLJ9zup+t2TJkmRrzKaIvE91H4zI5/CgQYOSrbFM/PpqdwIaK/Fzn/tcVqYxf3Tvi8hjz9Ti+ug5V1Ow+9qrn308rVmzJtm6L+qzR+T9OmzYsKxs8uTJyZ4yZUpLzw51avFemtquTX0u2PzgUQMAAAAAAAAA0BB4UQMAAAAAAAAA0BCQPkERdXfX1J3u2tunT59kuzv17Nmzu7y2u4Sq66GWuSt4LdXs4MGDk61u/O7qqrIDv4a6H6t7+s9//vMuvkVnMGHChGS7y72i40Xb1V00tX9rKaS1zNP+wgvjbauu2+qC7X2q/agpRH3O6hxziaK69atdWg86jaOPPjrZKqGIyGUOO+64Y1ZWkrh4X+u6qf3pfa2yGF+79Zpqu6u/XtPTr+uY0/TGtVTv7YjKwyLyPVNltZouPSJvJ5VH1CSjPha8Xzfg63KnutJrex122GFZ2X777ZdsT7u9YsWKZOsZw9M4ax/qPubnKO1D7wtdQ3Ud7tGjR1Zvl1126fL5Itpf2jZq1KhkP/3001nZ8uXLk+1nSl3PdF696lWvyupp+6mUyte8nXbaKdm19OmKy8j1c69evbKyMWPGJPvBBx8sXgNap1PXPuge4FEDAAAAAAAAANAQeFEDAAAAAAAAANAQkD5BEXW5VJdddxNU13d3s1Z3THUrdfdTdfnWMpUBROQurO7+rVmHtttuu2R79oPRo0cn213w9buNHTs22Z0sfTrwwAO7/PeaXEHLfLyUXI0jcrfukg2tUZMX6jzyOaDzSN26dU753/l81nmrbuKdnPVJpWKHHHJIsV5JQhiRu85rm/tc1PavSZP0+p4dT+U6Lt1R9Ht55ij9u4EDBybb5VMuK2k3VOoUkUtUVALj0ojS3uoyFm1P34N1bPh6q2h2v05C5YW+12nf6DoWkY91LXPZTWnvculTTRKs5yiVSPn5SDME+ZyaN29el8/RndF20qxcLhnVfcfXMm13nTt+bimdaXxO1eZpSWLje3BNYq77sErfkD4BdD9qGcc2wK8fAAAAAAAAAICGwIsaAAAAAAAAAICGwIsaAAAAAAAAAICGQIyaqKcS7mRGjBiRbNXxup5WP3ucg4ceeijZrt0uXaMW+0LLPH2iXl//7t57783qnXrqqV1eLyLXFw8ZMqT4vJ3EgAEDkq3zw+MpeKrQDTz66KPZZ02jqXr7iOenp91AbexA13jcEm3Dmo5eP2tKYI+pUIs1VErP7amoOwmNm6BzpZam19c/nXMak8D7UNdhvZ6PCY2F4NfQWA61FN86RnxN1vv17Nkz2R4PZdasWdHO7LrrrtlnXUe13T3miK69Gl/olltuyeqNHz8+2b4O65zTMh8LBxxwQPkLtDH9+vVLtqfW1tTpHvtH56KmwvbYMDondE753NYx4bGetK90jPic1ecvpYJuJ7Q9d99992R7LDRdszwmhLZ7Le6Xon3qZxi9Vy2eoz6Hr5sah6a2Zg8aNCjZGncOAJqJ/+asxf/bAB41AAAAAAAAAAANgRc1AAAAAAAAAAANoSOlT56idPjw4cletmxZstesWZPV2xRZlLuwappOdZeNqKfO3BbstNNOydbv7ukma2kl1S1UXbzcPVvddPV67laq7ekpXvV59Tlq13D03ir96mQ0lay2q/e1uu/q3Pnyl7+c1fvhD3/Y5d9E5K7HOl6QJG48vp6oDFHniq+HOq9ULrV27dqsnkoD/V4qGahJOzoJnUeKp1XV/nA32VIqbHefVXd5vYav3dpvPsd0LqrswyUg6orvz6Frr0qkPA1yu0ufVJYRkfeDtp/3t7aZzsULL7wwq7fzzjsn++ijj87KVAZXGoMR+ZrQ7ujepeuTyxBre5DKdHUe+Vqon7UvaumffRzoPNL5V5v3nk68HdG9SuVCLgOqhTfQMp2XvlbqOKnVq53jS+doffaIXCbr/ajrcq9evYr3AugEdB65pLp3797J1r00Iv/9/fjjj2+hp/s7uk4de+yxWdnUqVNf8O/xqAEAAAAAAAAAaAi8qAEAAAAAAAAAaAi8qAEAAAAAAAAAaAgdE6NG9Wnnn39+VnbkkUcmWzWkV155ZVbvl7/8ZbI9BaOievE3velNWdnee++d7I985CNZWdNi1KiuXuMheEwL1VN7PJhhw4Z1WeY6YU2nqBpcj2mh9/ZYM6rr1ZSkHgdF4+HUYp94DJZOZfvtt0+2jlGPrdG3b99ka0rmG264IaunsRY8zpD2h7a/xw6AjWfmzJnJ1nXIU7wOHjw42TrH5s+fn9WrxVTQeBealrlpa9zWZODAgcnWNcjXMY1X4Cl2dX5ofApPma3XLMUJi8j7zWPP6FpbWyf1mj6fNVaRpg7WfaET0PkWkc8d7eNaWmFdU11Tf/311yfbNfDaJ2p7bA1NBV5LYdwO6PfT84avhf379++yXkTelhpHRM8eEXn/qu1pl3Vt9PW0tIZ6XCGNgePfpR3R76/nPF839Qzj4750HvT+KcWV8jNv7dzoZ+cN6Nk1Iv+94ucsHYd+b4BOQMf9SSedlGzf+3R98DhQun5fcsklyf75z3+e1duUvc/n+ac+9alkf+hDH8rKzj777Be8Hh41AAAAAAAAAAANgRc1AAAAAAAAAAANoW2lT+7iffrppyd76NChWZm6Eqo71D//8z9n9U444YRkL126NCtTV0hN9612RJ4SrOnSGk1tpm6ftfTW7j6v7qjqfurfXa+prqgufdL+cXd/T7/W1TNEPN/1tfQceq92dwWvof2m39tdCbWNbrrppmSrO3ZE7rbfr1+/rEznoroPeip72HhUhqKu9Z6yt+Rmr9KLiNw13F091V1b6/n60M64fEGlT9omvp76ula6prr/1uZiTbaq/evrYkkW5WnaVfLoUgz9Ox0TPu/bHU1lH5H3ibazSyC0Tx588MFku6xFU3y6ZEP3Mf07lyGuWrWq/AXajNK65vNIz28+n0syJl/jSimZ/Qyhz+TX0DI92+oZLaIuyW9HdA3U7+7toHPA21brapmvh6WU7t6P+kw+F0tnZ5eM6jrtZXpvPfN28hm11d9SJWl9rR5sezzttv42HzVqVPHvli9fXizTtfM973lPsV7tt4zuCSod/uAHlx7ynQAAHDBJREFUP5jV0/cPtTThJfCoAQAAAAAAAABoCLyoAQAAAAAAAABoCG0rfXJ3qEMOOSTZnllBee6555LtLkrquu6uzOqqqLa7KNeixTdNFqBu2OoGWos0766eKpvp0aNHsl2appmyVP7i0ftVxuT3Urdlvf6hhx6a1VN3NXdxVNfUmlSrnV0j3eVX20S/t8sotD+uvfbaLv8mImLatGnJHj9+fFam/a1uhk2bG90RlZ7oWuYSCJ2nmqlnwYIFWT3tb7+GShZVJtpJ/ejrZJ8+fZKt7vYut9D55i78unbpXuLtWspq42tmzf3b627A90/t3z322CMr02dU6Z1LfPR7le7bnXFJmPa5t4Wi/Tp9+vRk+5qqc1Oz6kXkfbxo0aJkq8Sxk9E29nbt1atXsv3MUsq+5BJRRce5zz19DpfI6LlHXfb9jKr7ZydkfdK5o+3n8lGt5/OjJHfy/ilJ5mtrqJe1us6VpKsR+Xqu49Ofr93WUZ0Dr33ta7OysWPHJlvnx8KFC7N6uifXzvfXXXddsnXdjcizunVyFsstgc7bgw46KNlve9vbsnoq19c+9jAXOhb8PKbro64PHvLkqKOOSvZDDz2UlekeqpkdfU/XPcGl4x5GpSvwqAEAAAAAAAAAaAi8qAEAAAAAAAAAaAi8qAEAAAAAAAAAaAhtFaNGdd+nnXZaVqZaf9fuqvZY9aAaryaiHh9FP6sG1nWjGtfD0+JqDIkm4JrsDdS0sJ6+THWgej1POaja8Fp6w1of6N9pP+65555ZPdUJ+1hQzak+o7eFj412oqarLqUajcjjksydO7d4/ccee6xYpvND+7CTUsduKXTMaju7Zl/R2Bcee0H7W3XzEfkY0nWtkzTdPj9Uf63t5fFLnnzyyWRrjKCIiN133z3Zuv75OqbztBa3QtdMj+tQSgXuaYqXLVuWbF8Xdf1Xbb/G64nI1/Wm7YObg9o+U0v1q/GA5s+fX7y+zuGZM2dmZTpmdF76Oq/jpJ1jsDn6XX1s6zqp8UAi8jOlxirQeHsR+dlB55jHHtF572cbXSP69++fbI/JUEv/3Y7oGNY55fEotP28XbTPS33lf1eLNanP1GqcGD83a7/68+o87du3b/E5uuMZVb/DZz/72axM44x6umbdZ3Re6ZyKyMeBzmePt3jWWWcl+84778zKrr766mRPmjQp2bq/RXTWWaeG7zP6u2rkyJFZ2cknn5xs7R+fA/p7QMd56TdrxPPX29L66Ov3mDFjkn3AAQdkZbp3q+3n4TVr1iTbz3v+HqAr8KgBAAAAAAAAAGgIvKgBAAAAAAAAAGgI3V76pC6C55xzTrIHDx6c1VO3YZfdlCQznhpa3RPdVU7dtfV67l6l9Q477LCsTFNnNgF3T9+Au/Sr65m7fKkbWUne5GW19Nnq2uauhfp3Oi68v/V53TW15Jpcu0a7UUs3qe59Pg50bKssxlF31JrMSq8/Z86cyhNDK+hY17SFLn3SMsXds0tu5xH5/OuENLFd4WucuvKuWLEi2d7emq5RXWYjIgYNGpTsmmt1qW+8L9wdWNG0tbr+qZt5RD43fSypJEQlUu7uq+7A7Sh9ctmgni10z3TpjbrTL1++vHh97aspU6ZkZZraVNdUHwvaP52EzhXf5zX9tafC1ro9evRIts8PrVc6a0bkfe1zQM89Onf8mXz8tDsa7kDnlJ9ddX3xeaT7ovaPyyh0nGg71yRSrZ6latJhH5N6firJsSK6zxlV16QPf/jDyT7jjDOyenfffXeyb7vttqxM55yePbxNNAzCXnvtlWxPp6xtp/KyiPy3pcof/V6LFy/u0o7I+1vHX+08rHt/RMSSJUtiS+Nn/NL5PCJvw4EDByZ7/PjxWT2V4vp6peNZ90yfi7re6nqo/+5/5+clnX+6f/o5V/untmbr9fzdgV7fn9FlfF2BRw0AAAAAAAAAQEPgRQ0AAAAAAAAAQEPodtInlxy9//3vT7a6ta1bty6rpy5Wfo2Su6O7Bqurl7t9lVwc/d/174YMGVJ8xibQatRydRN0qZK2rbp/Ofrda+6iNVf9kluey3CeeOKJZO+6665ZWSlrgo+ZdsbHtn7WMeGyMXUprrndakYoHy+ljAnqYgovHh3P7rKrffDUU08luyZ9cnf/msSiU/B2LUli3a1Xx72vXTU3aUXLavuWrqf+vNpvNZmbuuL7Gl9yQ/dsNe2+vvrc0bbVPvb2mzFjRrJ133K0T/RvInL3bL2+z0t31+4UdE7UzhfeXq26zivaxn4v3TP9GiqV0LXDJT61529HVFqpc8ClLLp++dmk1bVS211tPwfVzkj6WcdMTTLqfarX12d3qW13QaVEav/qV7/K6v36179Otv++0/bSvcTHQUly1K9fv6yerpm+Bx966KHJ3m+//ZKtWaki8v516ZNKG/Vefs5du3Ztso8++uis7DOf+UxsCVSK7ffULE2eHUk/q1zMZX0qsXWJZ+mMoP3r99JxX5OC+jxS2aSewXx90P73/tExpBLF2jrs5z1/5q7AowYAAAAAAAAAoCHwogYAAAAAAAAAoCHwogYAAAAAAAAAoCE0RtBaS0ummrk3v/nNWb2999472ZrW1GNfqN6tpu13TWkJjyejekS1Xe+mf3fwwQdnZa1o1bYmGndC28zbT3WUruNW3Z7qSmuxEmrpDbX9aunWSvrDiFz76n2gekfVk3tKtXbG+1DHs7alzwFNL1+Lb6SxbHye6jiopcCEjacUF8X1tNruqi+uxahxvbLGTtC01J2Ej1ltcy3zVNUaw8n13b5ubsD7UK+v65jP2dq6rn+n9/VraJpQj7WgdXVd8X1WYxPo928Xpk6dmn0+++yzk61rpffjXXfdlWyNZeDo3J41a1ZWVkob6vFwOimWlI51bXNvk9oeVDqL+Dqp16zFadK+8WusWrUq2RrXQdNOR+R96HtrO+DrX//+/ZOtfTBgwICsnra7xl2LyNeiWnwZbU/tU5+ztfg1+nca78LjoOj38vTQpTm8reMTafroESNGZGX6XX2ded3rXpdsjRXj+4DGKfHYTLp/6G8On8+6hk6fPj3Z8+fPz+rpXq3Xjsj7Q+OGLVy4MKunz6EpqSPyeau/+9avX5/V0+v7vls6C7xYRo8eneyzzjorK9OznD+Pzis9B3g8IV3bPPaMXlPbSH/PReT9o+uox7rTuejzQ/cAnVM+Z7VPfOzqNdasWZPslStXZvX0HKdreURr8TfxqAEAAAAAAAAAaAi8qAEAAAAAAAAAaAib7CvXampQRV3BInKX79122y0r09TVmkLZXRrVpaiUCtQ/uxuV/p3a7tqlblUup1EXq1L6vIhcWuPuey4f2NaoS17NRb7mkq3ftyRr6epz6V61caftrm6B3t8LFixItqeHU3c7dUdVt86IiMcee6z4HN2dmqRM5XBeT136am7X2ubuSqjzVPsa6dOLR9tT11R3vdR1SPvUZZzq6utzTN2D9V6dhEsbtI10LfS0qjU3XJ1XNSmRrqfabz5na5KmknzR56ym51ZZY0QuTdbr+fowcODAZPsa3w4SDk1J6tRSiKqsrFVZtsvP9NxSSyPtMrtOQcebnwe0zFP96rlH5d++Tmqf6vV8Hml/eKp0lQ+oi33Nnb92Vuqu+BpVkuf7+Vzbz/c7PVvUzu6l+VeTefvapdfUMu9vred7q+4Xel7VttgW6Nri/aRt7CEeSmc7bzuXCCt6TtH2uffee7N6em7XdbK2ttZkN9pvPp9LUvOIPJyHno9cArdixYpk+9rkkqLNxbx585J9//33Z2XDhw9Ptv+e17bQPvD20zHrsnj9Ox1DLvMqnSW8nXVN9XVZzyq693kq9UcffTTZLpvUv9O12NcEHV/+u9/v1xV41AAAAAAAAAAANARe1AAAAAAAAAAANARe1AAAAAAAAAAANIRqjBrVXLmuUGPKeOpi1RKqHm3MmDFZPdV3uW60lHpMtcBeT7XYHh9A9XS1dLRa5s+gn1vVzde0dbV4AU1A26ymd1atpMejKKUB3tQYNbUyT8W3AddSqm7RNYeaRk/7R2MmdRqaIlDTmbuuWvW0tfmhek0f86X+1hgWsGno/NMYMkuXLs3q6ZxdvXp1sl2D/cgjjyR7jz32yMp0znVqjBrfM3Xd0XHu65OuY76m6bzS/dP3YJ1jel+fl7rueqwc/TvV89fSOutaERFxxBFHdPlMrq/XdddjFvg60x3xVLMa38nbXdH4P63i5xuNEaB94DFpPJZAO1OKf+ZxIHSs+940Z86cZGsMIo/9o+dS3e9q5z2fp/pZz7Yel0SfsWnnyc2Brw26dup5zeMJ6T7msSpK/ePoWlk73+hz1OKWaF/5Mym+tusz1mJe+pqzpdE5UIvJ5dx8883JrrV/7ffXpsQPahWfz5sDjamjMVCagMao+fKXv5yV6R7h5zpdizQGj/8Wr8WLLcXM8zNALd27ou8LPJaqnkH0GrXYbbV71eIOlt5TRNTnfvr7F6wBAAAAAAAAAABbBV7UAAAAAAAAAAA0hKr0SdO0nnjiiVmZpulyV2h1Z1JXIXdDU7ek9evXZ2XqHqRubu76WHIbdjdVdZH0v9GyWhpglQS4u7q7G2/AXfS0DdxttWmux+oCVnMhVJeykoQpIm+LmmtvKYXhC1GSzbg7pfadjztFx4Knkesk1E1T+9dd+F772tcmW9u8NnZqKTC1TFOSwqZRSuvprtXqqqrzw/tRXf89rWTPnj2TrTKrdqeWIlb3SS1z12DtJ1//1AVYr1dLraxlfj29l7v1llzNBw0alNVTN+eVK1dmZTou9Ht62/Tr1y/Zvpe2g/TJpd3q7qwSOT1zRUQMHTo02dOmTUt2bU31/U77VfvR12/vk3bC9xndx3TsuYRCx2wtlazW8/Gr9fRMUZPg+/Pq9XWM+Fm2lN62XfAxqmdonRPeLnpG9XVOr9lq+7U6/3w8lUIf+P6pZ29/jpJsr2m/H1qlFg4Ctj66R/hc0fNgLc19LYSI4mugjm21fR6VpG6139ut/ub0562lbi/dqyaR8rW9lTGPRw0AAAAAAAAAQEPgRQ0AAAAAAAAAQEOoSp8GDx6c7OOOOy7/Q3FZclmCulqry6G7EKnLYf/+/bMydQ+quYKrm1JNmqSu+C45UtdjdTl09yWVCPhzaHvUXKXUPdFdrGqyq22B9qN+J2+X2bNnJ3vkyJFZmbZTSdbi9ZSaNKYmi1J3eXcdVRdmlW9ERBx++OFd/l0nS5+mTJmS7FNPPbVYTzP/6Hxw6YK6+tVcg7V/W4mMDnVKskvPkKH13L1V0cw1Pk9VTtAO0pVNQSVBEXk2RHUh9rFdklRElN3efS/R+ad7oa+Feo2aXFiv71K5UaNGJdvnsz5HLXOb7v+1TH/dFZemaXasESNGJNtdwbVtr7rqqmTXXKtr+6KOJ3e53hLZTZpCLdtZLQNeSaJWw+diq2egVjMOlaRsEbmk1c/A7bCH+vql31EzdnlbqiTTQzXoeqvz1K9RkqZtjNxC90K9hs9nlUL5elvK4lYKvwCwJfDxpmdKHds+Z1Vyq+uV19Xr1zL86hnG51ttPutcLK0Bfq9aZky1/V61zJueabAr8KgBAAAAAAAAAGgIvKgBAAAAAAAAAGgIvKgBAAAAAAAAAGgIVVHjokWLkn399ddnZfvvv3+y99prr6xM48GozsxT69X0uk8//XSyVRdWS32ocURcS6ba7FrqQ9Xx+r00LaLrzPS7qEbV4zPUUvd5PIJtTek7uZ5WdYXex6W/azW9odcrPVNXz7UB12rvueeeyV6xYkVWpnpEvX47py59IS6//PJkf+ELX0i2zwFtI50rnrJX8T7Ua2h/9unTZyOeGLqilKbZUwLrfK7F29LraUyaiFxHX4tz027o3rJgwYKs7Pbbb0+2rnHLli3L6uke5PuYon3j+4w+h84x105rH/q+WLq3r7NDhgxJ9syZM7OyxYsXJ1vPBR4L5JZbbkl2O8TScHwe/fjHP072CSeckGxfU/fZZ59k6/nGx0ztXqXYAd7fnq67ndH5smrVqmRrTMWIPP7eEUcckZWVYvp4H+qZQu9biz/l6Bxeu3ZtspcsWZLV03hjTTtPbg78vFA6a/sc0N8y69aty8p0TdRr1NKn1+JAleJsRORrZy3GWO13SOmM5OdcgC2JnzmefPLJZNf2mVp8W0XnRG1NrVFL/d5qKvjad9HnqsWmerHgUQMAAAAAAAAA0BB4UQMAAAAAAAAA0BCq0qfly5cne+LEiVnZz372s2RrWt6IiAkTJiT7n/7pn5Ltrnnqmulpukru2i5BUTdGdbOePn16Vu+BBx5I9mOPPZaVldyINT15RMR73/veZB966KFZmbpaqmxL3cEictepWbNmZWXz5s3r8jm2Fep+WZM+ab+6u7z+XS2lYcmFzKml+tVxom7J7q42dOjQZD/88MPF66mLXie5hTurV69OtrqG+3zWNlJ5mUuftK/dfVyvoeOslroUWkPXKLVVphRRT9msaP94Kmp1//brtzO6dj3++ONZme4FI0eOTLZKgiLy+eap03Xu1NZM7d+aC3FNjlqS6apUJCKX5Lhs6f7770+2rhdXX311Vu/BBx8sPkc7ctdddyVbU/H6XNG05Soxr0mf9PwRkfejnrncfbzV9NPthq5VtRSuvhbqWNd6NRd7nW/e/nre8OfQvtFr+PlS+9clrTpmNrdr/tbC+6CU4tplXypxd3mbzjk9j9T6UduvdjZx2VJpXfZz81NPPZVsP/PqOrp+/friNWrnbYDNTels4ugc8FTY0DX8+gEAAAAAAAAAaAi8qAEAAAAAAAAAaAi8qAEAAAAAAAAAaAjVGDU1VA86d+7crEw//+AHP/i/m5leU+NR9O3bNyvTlJKq4XZ9qWpPVfO7OTSZTzzxRPb51ltvTbZ/l1ZTc9ViPjRNR6rPqvpXj1HTo0ePZLs2WPXf2t/efqV28X/X+BmOXlNtfYaIPKaCfxfVDeu9Ozn1oY5tjZ8xcODA4t94uuYSHqOmFJ/CY6DAxqPri+rePS6GzpdaqmRde3WNjsjX71Ia23bHY1BorCZdd7StIvJU9F5WivnllOIR+d+oRtznXklz7muwxpfzGHLTpk1L9n333ZdsTZcbUY891o7ofFm4cGGyR40aldXT/tIYNbfddltL146IePbZZ5Otfed91UmxpHSfHzBgQLJ9vdM28VgkrcbVK6V39blYOntE5GcnPWPVzox+ZinFnOpOeDvr2Nbv5Ge+Gq3WLcX62tT4edrHvv5pfNBazCn9PdRd+xQA6uBRAwAAAAAAAADQEHhRAwAAAAAAAADQEDZZ+tQq6uLtMhN1idd0dN0B/y6t0jR5U41SKkFH28IlTfp36sbv7vMlt02/nkurStRcU1VG47KM0t/5c3QqEydOTPbHPvaxrEzbaNddd23pei4PUdTNWdNQwqahY3vOnDnJ3m+//bJ6Op9rkhSXWCjqTu7S2E5F17i1a9cm+957783qjRs3Ltkqd4l4fgrW0r9rX6sEwvcf7V+XAJSkGL73qSzD11NNQ7106dJkd0IK7la57rrrkj1ixIisTNtp2LBhyfY9Tev53uoSpw34nqsyknZH54tKt3Usd/VZ2XHHHZOtMmCXHGl/6PnF6+lc9P7Vv9N6a9asyerpNV2aPGPGjGTX1u4m4/uRrkXazp72V7+vzwf9rO1eO/PWymoSpFKZr9+rVq1K9vz587MyXcOfeeaZ4r0AoD3AowYAAAAAAAAAoCHwogYAAAAAAAAAoCGg54Ai6gqtLqbuNjt16tRk9+/fPyvTjCAqX/EsX+q2usMOOyS7FuXfUZdQjYbv7uTXXHNNsidPnpyV6d+pVMsj73cql156abLPO++8rEzb64gjjkj2d7/73ayeug279En7W+0nn3xyE58YumLx4sXJdnmNutPXJJ41aaRKBpYtW7bJz9muaNu57FfnxC677JKVlfrDJaG6Ftay+dRkqyoJ0PXZn0ElU75e65qP3Klrrr766mSfffbZWZlmIRo9enSyXTaj+5b3t67LKmHzfdzHWjujY13PBy4l0jngZw+VndSy7+i4d0mOorIenyuaYc8znyo6XnyM6JrcLtInbYtBgwYl29eoUuaziHKGUJdIaZle3/c+LXNJk/ZJbZ3XcahZ4SLyM7ZKTTkjAbQneNQAAAAAAAAAADQEXtQAAAAAAAAAADQEXtQAAAAAAAAAADQEYtRAkQULFiRbtbCu1b7//vuT/ZOf/CQrU022xk1QrXyNmt7bKV3TtdqqNXa9sn431fbD31m9enWyPTWkxkbYfffdk+1pf3UczJs3LyvTtN41vT28ODQ99/HHH5+V1dLEKlrmen69xvTp0zf5OTsBj7ugnz1ujK5/Oq+8nn7W2BSenrsWa0GvrzFwNIZYRMTQoUOT/eCDD2ZltZgc8Hc0jo+jMS40HbTHtNB9y9db3UPV9lgnHp+lndG9vU+fPsnu1atXVk/XNY9nN2vWrGTXYviVzkB+9tC+8XOO/p3Gy/P4JYsWLUq2x77SPXTt2rXRHfF20TbTs4P3gbZZz549szKdL3qG9LWyFEPIn0nreYwa/azX9/ms19B4chH5eqv3Xr58eVbPnx8Auid41AAAAAAAAAAANARe1AAAAAAAAAAANASkT1CkR48eyVYXYP33iFwWVUsduaUpuXrWUnq7vEndg9U1eeedd36RT9ceqEuxp13WtJHqpu+SNO0n7zN1DVbJhl4PXjwqffLUzkpN+qRSN5cMqEu6Stjg+Xgq2ZkzZyb7tNNOy8r22GOPZGvf+Dqm80jXMZ+LmiLWy0qSAP2biFxmtXLlyqzMpavwfHR/8r1qp5126tJWuU5ELnkZOHBgVlaa3y6RUulIu6PylwEDBiTbJShLly5N9v/+7/9mZS793Vg2Zm4sWbKky3/3lMwzZsxItsp9Ip7f390RPy9oG2o/etvqeuhyJJ0fvXv3TrbPB713q/Jgv5dKzubOnZtsHWcR+Zna12W9nz7Ttjx7A8CWA48aAAAAAAAAAICGwIsaAAAAAAAAAICGwIsaAAAAAAAAAICGQIwaKHL99dcne8yYMcl+5JFHsnqqte1ueBrH//mf/0n2+PHjk/2Vr3xlqz1Tk1FN9I033piVqZb68ssvT3Yt1ejFF1+clWmMIE1/+vOf/3wTnxi64tFHH022z99rr7022Z46WlEd/bRp07IyjVVy3333bfJzdiKajvUb3/hGVta3b99ka4wg/feIekwGReesxzLRmBYal8bTrWssDI2REfH8+DvwfDSehs69iDz2k9bztMyKrpsREf/5n//Z5fU8dtRVV13V4hN3PzzOh8bzmDJlSrIfeOCBrJ625YuNSfNiKKW593hRl1xySfFv/KzTHfGzhJ4zdA/y76oxflavXp2V/dd//VeyNf6ixgOLKMf68rg52iceN2bBggXJXrFiRbK9r/R7+nqra+rDDz+cbP9eANAe4FEDAAAAAAAAANAQeFEDAAAAAAAAANAQXvK3Uk5jAAAAAAAAAADYquBRAwAAAAAAAADQEHhRAwAAAAAAAADQEHhRAwAAAAAAAADQEHhRAwAAAAAAAADQEHhRAwAAAAAAAADQEHhRAwAAAAAAAADQEP4/U/WZYatyQOMAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 1440x288 with 20 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axes = plt.subplots(ncols=n_classes, nrows=2, figsize=(20, 4))\n",
    "for i in range(n_classes):\n",
    "    \n",
    "    axes[0, i].imshow(X_test_scaled[i].reshape(image_size, image_size), cmap='gray')\n",
    "    axes[0, i].axis('off')\n",
    "\n",
    "    axes[1, i].imshow(reconstructed_images[i].reshape(image_size, image_size) , cmap='gray')\n",
    "    axes[1, i].axis('off')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Denoising Autoencoder"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The application of an autoencoder to a denoising task only affects the training stage. In this example, we add noise to the Fashion MNIST data from a standard normal distribution while maintaining the pixel values in the range of [0, 1], as follows:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T02:57:32.428120Z",
     "start_time": "2020-06-22T02:57:32.425511Z"
    }
   },
   "outputs": [],
   "source": [
    "def add_noise(x, noise_factor=.3):\n",
    "    return np.clip(x  + noise_factor * np.random.normal(size=x.shape), 0, 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T02:57:34.595748Z",
     "start_time": "2020-06-22T02:57:32.429551Z"
    }
   },
   "outputs": [],
   "source": [
    "X_train_noisy = add_noise(X_train_scaled)\n",
    "X_test_noisy = add_noise(X_test_scaled)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T02:57:36.041600Z",
     "start_time": "2020-06-22T02:57:34.599138Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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dnv7PIf32/n/Pq3Nes/4nvvZ26d73dd7pdb4t4jqPU7pfdqvhw8fnnoa3+QRUGPHji31ggULUk/HOnwrtY9rKNYm1GWXXZauNdpTt+hG5O38Hod6tLGAOjp25HHcOsrkcaQ6kuOvBf5srGtu3bp1td/Lddddl651tOjRRx+t/bgnnngiXet91KPRNWZRI1UjIlavXl37NdDz+H1T4wOPOSb/t239+2x6je/Tp0+61u38Bw4cSL2TTjqp1D/99FPq6WuDv07oCJKOOEXk0aWIiDlz5pTaR/JOPvnkUn/77bdRR6MSI/IovT9faHRy03O6q/udssMAAAAAAABU8IYBAAAAAACo4A0DAAAAAABQ0e1YRY9105n7KVOmpF5TrJRGEPos5Nq1a0v98MMPp57OZvrn1zm1adOmpZ7HHGqcxDPPPJN6q1atqv08jzzySKl9TszPSfh/YBYTqp0zDDRK8I477mj54zT20GehdY7xs88+S71TTz211D7DpRGrfp6JR0BptIyeg+If67OR+jX1XJCIiK6urlLra09ExJ9//llqnRmNyHOjOhcWEfHpp58G8K921qae8fHHH3+k3siRI0vtEYgaR3zaaaelXkdHR6n9vjlq1KhS+3kiet7HAw88kHoel7Zp06ZSX3LJJamnMU++/vWchr///jv1Nm7cWGo96yAi4osvvii1xg9H5PN9xowZk3q7du0K4F/trE1dcx55qs+Ns2fPTj2NC/T4N41g3LBhQ+rpuVi+NjQaec+ePanXNO/cxKOKv//++1Jv3bo19fS8g1bjFyOqs+fKf0b0bH5OztNPP11qf13XmG8/w0Njvj0OtVXDhg1L1342QJ0JEyaka41qjMhnfFx44YW1n0efk52etRBRPW9B6e/QX4s6OztrP44zDAAAAAAAQMt4wwAAAAAAAFS0NZKgERW+nVe3hWzZsqXlb2DevHml1i3Ibvny5elat3r41uYrrrii1L5FpGlryd69e9O1bq32CJh77rmn1D///HPq6dbm559/PvVuvfXW2q+vv2//v4WRBKjuxiqOHz8+XR85cqTUvtVQR2t8G5TGGvoIkkau+iiPRuWcc845qdfdOFKn608jFiPy6JRu3Y7I2yd1jCMijz28/vrrqcfahPLXfN1O73G5d999d6lPPPHE1NN7rG/71/Xn8cc//vhjqT0CSrch+2uIxir6Vv6+ffuma11XPnagFi1alK51S6avm927d5fatyvr9vCzzz479TQaz+OHWZtQHsk5ePDgUusogZs4cWK6nj9/fqk1Ki0i/801jb018ThS3Vrt91RdtxERv//+e6k9DlnHfnyUSdeOPzfr78a3gPtW51axNqHaeabV0bpjjz029Xbu3Fn7cfr862tDR4S2b9+eeroeL7jggtTTfzd++OGHDd911q9fv3R96aWXltqjU1U7Ea+XX355qT1Gsul5m5EEAAAAAADQMt4wAAAAAAAAFbxhAAAAAAAAKhrPMPD5K416ePbZZ1NPI5o8SkXnQTQeJiLPfPgM58GDB0vtM1WffPJJqa+66qrUe+ONN0rtczE+t6LzyH5Owg033FBqn5NZvHhxqT3W4sknnyx1//79U09nSJviaR577LF0/eCDD9b+b9Hz+Cymzl+df/75qadxbX6Ggf7Ne+TowIEDS60RbxER9913X6k91vT6668v9emnn556GgHlLz0+i71mzZpS+3kHGvPmkTtPPfVUqU844YSo0zSn2RTj6JjFhPJzA4YOHVrqdiLJ1J133pmuNQLYP6eeBaTnGUTk6Co7if5eAAAGJ0lEQVS/p5155pml1nOAInJUYkSOQL3ttttST6OcjjvuuNS78cYbS+335rfffrvUGuMWke+j/vOecsoppd6/f3/qsTahZs6cma71mVZjBY9Go7v9XCw/R0PpGR5+vodqek52/tys90M/l+uHH36o/TxKzyuLyGeKeIzkypUrS+1RcR9//HGp9bykCNYmsmuvvTZd6/Ofz/vr/cdjtfVZ7fjjj089febTv82I6t9nHb9v6X1zx44djR/76quvltrPPuku/ZmazmFxusb13JMIzjAAAAAAAABt4A0DAAAAAABQ0VasokbQ+NampshF3RbsH6cxM7p1MyJHNx0+fDj1dKvzggULUu+aa64ptW/78q1dun3axyz0+/nmm29ST7eEX3311dGqESNGlNq3i+nX8wgM3VYODBgwIF1r7Nq6detST8cVpk+fnnrnnXdeqXVcJiLi8ccfL/W4ceNST7dIT5o0KfV0Pfi2K91O7Nug/vrrr3StEXS+RXLs2LGl9m1Y+pLm4xkfffRRdIduQW2KsQLaiYfSLcoex7hs2bJS+9q45ZZbSu3rfc+ePaXW0aGIPOrmsUr6WqAjdxHVrcZ33XVXqV988cXUe+6550rtcawaVazRkBER69evL7Wv26+//rrUPnbw0ksvlfqmm25KPbY9Q7WzNl944YVS63prh69N3Wbt26U9ulsNGzas1D4CoRHjETnmsLsjUP4s0Oq4hj8n6LiujiNGsDaR+b1Kn9XaiSvs3bt3qf2+qaM+Hp04aNCgUv/222+pp//e87Whsb5O/80c0fpIkNMx/3/++adbn6MdjCQAAAAAAICW8YYBAAAAAACo4A0DAAAAAABQ0XiGgUeSaXzDBx98kHo6/+Hz9009jV3yWWA938BpPOKsWbNS79dffy21xq9FRNx///21n9N/FTrvuXDhwtSbNm1aqTdt2lT7OXv16pWuNZ7m9ttvTz2d/RwyZEjq+fwXerZ2ZjE1Iu3cc89NvZ07d5Z6165dqafxcFu3bk09jcDx2Uudd/YZLo0x1Ti0iOpschOd2/TvTdfY1KlTU2/VqlWl9t+Fx+y0illMqPnz56dr/Zvzs3hee+21Und0dKSexoz6OR26/i+66KLU0wjEN998M/V0blNjDCPymTqvvPJK6vl989577y21nmcQkc8X8fv90qVLS+1xWBq5qHF3/nF+1pHOhXrEnH999Gz+PKYRhB6lq+d4+N+VzhEfOnSo9ut55K+e4eHrr+mMsNGjR5f6yy+/rP16R6NnMWhseUSOqvMYYf296c8QEfHVV1+VuumZfe7cuel6xYoVLXzH6Cn8mVbPsPvll19ST8/G8qhU/XeV/pvKecS4xqFefPHFqbdly5ZS+/OexhP7WXMeFdl0TkkTPe/EX2/0DLF333239nP4uUD6bPzQQw+lHmcYAAAAAACAlvGGAQAAAAAAqOjd2Oyd20eOHCm1bwv0rf+qaVugbpPw6ELdIuI0nvCtt95KPd1q/M4779R+Dvfyyy+na41y87EDjarzyDel26Odb5fZvXt3qWfMmNH8zQI1dAQoIqKrq6vUvmVKR2vWrl2bep2dnaX2cYGm7fsawfT555+nnm4789eQppEEX2O6fdOjnHStNsXxXHnllelafybdZhZBrCla539zPoagdAxh4sSJqafjA7o90/m2Z70X63hCRMSSJUtK7etdv4aO/EVUnwW2bdtWah25cAMHDkzXGrmqMYoRERs3bqz9PPoz+muK8nULKI8k05E8j0sbNWpUqbsbT+h/q3pv9PufjqH6SII+7/qa9nvxyJEjS60RqxF5zHDz5s2ppyNQTp9jPapOn+G/++671NOf38ecGElAE12b/nela2Dy5Mmpp+MDHrOrY/ZnnXVW6s2ePbvUPq7w/vvv137cjh07/vP7/6+evsZ4VKmO6Pm9UEcSzjjjjNTbt29fqXX8OCI/+2s0ZEQeQb755pv/8/t37DAAAAAAAAAVvGEAAAAAAAAqeMMAAAAAAABUNMYqAgAAAACAnokdBgAAAAAAoII3DAAAAAAAQAVvGAAAAAAAgAreMAAAAAAAABW8YQAAAAAAACp4wwAAAAAAAFT8DzcKfQhDOqXHAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 1440x288 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axes = plt.subplots(nrows=2, ncols=5, figsize=(20, 4))\n",
    "axes = axes.flatten()\n",
    "for i, ax in enumerate(axes):\n",
    "    ax.imshow(X_test_noisy[i].reshape(28, 28), cmap='gray')\n",
    "    ax.axis('off')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T02:57:36.073794Z",
     "start_time": "2020-06-22T02:57:36.043445Z"
    }
   },
   "outputs": [],
   "source": [
    "x = Conv2D(filters=32, kernel_size=(3, 3), activation='relu', padding='same', name='Encoding_Conv_1')(input_)\n",
    "x = MaxPooling2D(pool_size=(2, 2), padding='same', name='Encoding_Max_1')(x)\n",
    "x = Conv2D(filters=32, kernel_size=(3, 3), activation='relu', padding='same', name='Encoding_Conv_2')(x)\n",
    "encoded_conv = MaxPooling2D(pool_size=(2, 2), padding='same', name='Encoding_Max_3')(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T02:57:36.126251Z",
     "start_time": "2020-06-22T02:57:36.075267Z"
    }
   },
   "outputs": [],
   "source": [
    "x = Conv2D(filters=32, kernel_size=(3, 3), activation='relu', padding='same', name='Decoding_Conv_1')(encoded_conv)\n",
    "x = UpSampling2D(size=(2, 2), name='Decoding_Upsample_1')(x)\n",
    "x = Conv2D(filters=32, kernel_size=(3, 3), activation='relu', padding='same', name='Decoding_Conv_2')(x)\n",
    "x = UpSampling2D(size=(2, 2), name='Decoding_Upsample_2')(x)\n",
    "decoded_conv = Conv2D(filters=1, kernel_size=(3, 3), activation='sigmoid', padding='same', name='Decoding_Conv_4')(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T02:57:36.142916Z",
     "start_time": "2020-06-22T02:57:36.128228Z"
    }
   },
   "outputs": [],
   "source": [
    "autoencoder_denoise = Model(input_, decoded_conv)\n",
    "autoencoder_denoise.compile(optimizer='adam', loss='mse')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T02:58:38.907400Z",
     "start_time": "2020-06-22T02:58:38.905536Z"
    }
   },
   "outputs": [],
   "source": [
    "path = (results_path / 'autencoder_denoise.32.weights.hdf5').as_posix()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T02:58:39.227529Z",
     "start_time": "2020-06-22T02:58:39.225034Z"
    }
   },
   "outputs": [],
   "source": [
    "callbacks = [EarlyStopping(patience=5,\n",
    "                           restore_best_weights=True),\n",
    "             ModelCheckpoint(filepath=path,\n",
    "                             save_best_only=True,\n",
    "                             save_weights_only=True)]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We then proceed to train the convolutional autoencoder on noisy input with the objective to learn how to generate the uncorrupted originals:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T03:01:25.286960Z",
     "start_time": "2020-06-22T02:58:39.957845Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0095 - val_loss: 0.0094\n",
      "Epoch 2/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0094 - val_loss: 0.0095\n",
      "Epoch 3/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0093 - val_loss: 0.0093\n",
      "Epoch 4/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0093 - val_loss: 0.0092\n",
      "Epoch 5/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0092 - val_loss: 0.0092\n",
      "Epoch 6/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0092 - val_loss: 0.0093\n",
      "Epoch 7/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0091 - val_loss: 0.0091\n",
      "Epoch 8/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0091 - val_loss: 0.0091\n",
      "Epoch 9/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0090 - val_loss: 0.0090\n",
      "Epoch 10/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0090 - val_loss: 0.0090\n",
      "Epoch 11/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0090 - val_loss: 0.0090\n",
      "Epoch 12/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0089 - val_loss: 0.0090\n",
      "Epoch 13/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0089 - val_loss: 0.0089\n",
      "Epoch 14/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0089 - val_loss: 0.0090\n",
      "Epoch 15/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0088 - val_loss: 0.0089\n",
      "Epoch 16/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0088 - val_loss: 0.0089\n",
      "Epoch 17/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0088 - val_loss: 0.0089\n",
      "Epoch 18/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0088 - val_loss: 0.0088\n",
      "Epoch 19/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0088 - val_loss: 0.0088\n",
      "Epoch 20/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0087 - val_loss: 0.0089\n",
      "Epoch 21/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0087 - val_loss: 0.0087\n",
      "Epoch 22/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0087 - val_loss: 0.0088\n",
      "Epoch 23/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0087 - val_loss: 0.0087\n",
      "Epoch 24/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0087 - val_loss: 0.0087\n",
      "Epoch 25/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0087 - val_loss: 0.0087\n",
      "Epoch 26/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0087 - val_loss: 0.0087\n",
      "Epoch 27/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0086 - val_loss: 0.0087\n",
      "Epoch 28/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0086 - val_loss: 0.0088\n",
      "Epoch 29/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0086 - val_loss: 0.0088\n",
      "Epoch 30/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0086 - val_loss: 0.0087\n",
      "Epoch 31/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0086 - val_loss: 0.0087\n",
      "Epoch 32/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0086 - val_loss: 0.0086\n",
      "Epoch 33/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0086 - val_loss: 0.0086\n",
      "Epoch 34/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0086 - val_loss: 0.0086\n",
      "Epoch 35/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0086 - val_loss: 0.0086\n",
      "Epoch 36/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0085 - val_loss: 0.0087\n",
      "Epoch 37/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0085 - val_loss: 0.0087\n",
      "Epoch 38/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0085 - val_loss: 0.0086\n",
      "Epoch 39/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0085 - val_loss: 0.0086\n",
      "Epoch 40/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0085 - val_loss: 0.0087\n",
      "Epoch 41/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0085 - val_loss: 0.0086\n",
      "Epoch 42/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0085 - val_loss: 0.0085\n",
      "Epoch 43/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0085 - val_loss: 0.0086\n",
      "Epoch 44/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0085 - val_loss: 0.0085\n",
      "Epoch 45/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0085 - val_loss: 0.0086\n",
      "Epoch 46/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0085 - val_loss: 0.0085\n",
      "Epoch 47/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0085 - val_loss: 0.0086\n",
      "Epoch 48/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0085 - val_loss: 0.0085\n",
      "Epoch 49/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0085 - val_loss: 0.0085\n",
      "Epoch 50/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0085 - val_loss: 0.0085\n",
      "Epoch 51/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0085 - val_loss: 0.0085\n",
      "Epoch 52/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0084 - val_loss: 0.0085\n",
      "Epoch 53/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0084 - val_loss: 0.0085\n",
      "Epoch 54/100\n",
      "422/422 [==============================] - 3s 6ms/step - loss: 0.0084 - val_loss: 0.0087\n",
      "Epoch 55/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0084 - val_loss: 0.0085\n",
      "Epoch 56/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0084 - val_loss: 0.0085\n",
      "Epoch 57/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0084 - val_loss: 0.0085\n",
      "Epoch 58/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0084 - val_loss: 0.0085\n",
      "Epoch 59/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0084 - val_loss: 0.0085\n",
      "Epoch 60/100\n",
      "422/422 [==============================] - 3s 6ms/step - loss: 0.0084 - val_loss: 0.0085\n",
      "Epoch 61/100\n",
      "422/422 [==============================] - 3s 6ms/step - loss: 0.0084 - val_loss: 0.0085\n",
      "Epoch 62/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0084 - val_loss: 0.0084\n",
      "Epoch 63/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0084 - val_loss: 0.0086\n",
      "Epoch 64/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0084 - val_loss: 0.0085\n",
      "Epoch 65/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0084 - val_loss: 0.0085\n",
      "Epoch 66/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0084 - val_loss: 0.0085\n",
      "Epoch 67/100\n",
      "422/422 [==============================] - 2s 6ms/step - loss: 0.0084 - val_loss: 0.0084\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<tensorflow.python.keras.callbacks.History at 0x7f2b70074910>"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "autoencoder_denoise.fit(x=X_train_noisy,\n",
    "                        y=X_train_scaled,\n",
    "                        epochs=100,\n",
    "                        batch_size=128,\n",
    "                        shuffle=True,\n",
    "                        validation_split=.1,\n",
    "                        callbacks=callbacks)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T03:01:35.470518Z",
     "start_time": "2020-06-22T03:01:35.453553Z"
    }
   },
   "outputs": [],
   "source": [
    "autoencoder_denoise.load_weights(path)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T03:01:36.600617Z",
     "start_time": "2020-06-22T03:01:35.823029Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "313/313 [==============================] - 1s 2ms/step - loss: 0.0085\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "'MSE: 0.0085 | RMSE 0.0921'"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mse = autoencoder_denoise.evaluate(x=X_test_noisy, y=X_test_scaled)\n",
    "f'MSE: {mse:.4f} | RMSE {mse**.5:.4f}'"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Visualize Reconstructed Images"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The following figure shows, from top to bottom, the original images as well as the noisy and denoised versions. It illustrates that the autoencoder is successful in producing compressed encodings from the noisy images that are quite similar to those produced from the original images:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T03:01:39.086642Z",
     "start_time": "2020-06-22T03:01:38.769902Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(10000, 28, 28, 1)"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "reconstructed_images = autoencoder_denoise.predict(X_test_noisy)\n",
    "reconstructed_images.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T03:01:44.687016Z",
     "start_time": "2020-06-22T03:01:39.131108Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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R0cje/bsaNKkCQoWLIiDBw9iyZIleOWVVzB8+HA0aNAAAHDmzBl06dIFBw8exGOPPQZ/f3+sXbsW3bt3h6+vL7Jly6bs19tvv41ffvkFfn5+6NSpEy5evIiYmBh06tQJI0aMQO3atQHc+B9AL774IgoUKIDmzZsjR44cWL16NT777DMcPHgQgwcPviuvExEREWUQi4iIiO55NWvWtFwul3XmzBnbdefOnWu5XC7r9ddftyzLsg4dOmS5XC7L39/f2rVrl7Lu9OnTLZfLZY0ePdqyLMtKSUmx6tSpY1WvXt3av3+/Z70jR45Y4eHhlsvlsr744gvP8q5du1oul8s6d+6cZVmWtXbtWsvlclkBAQHW5s2bPeslJSVZtWrVsqpWrWpduHDBsizL2rJli+Vyuay+ffsq+3TlyhWrZcuWlsvlsvbt26c8h549e3rWCw8PtyIjI60rV654lh07dswKDAy02rVrZ/s6mXTo0MFyuVzWjh070jQuISHBqly5svX4449bCQkJnuUXLlywunXrZrlcLmvmzJme5S6Xy3K5XNaSJUuU7bjfj4iICCslJUX5N/lau5lemy+++MJyuVxWaGiodfDgQc/y33//3apcubLVqFEj6+rVq7cdf/36datly5ZW1apVrW3btimPN3jwYMvlclkTJkywLMuyrl69ajVs2NAKDg624uLiPOsdPHjQqlOnjjZnTNIyF259/b777jtln5955hnL5XJZq1evtizLss6dO2eFhYVZERER1rFjxzzrbt261QoKCrJcLpc1ffp0r/vmfrwGDRpoyy9dumTFx8dbffv2tVwul9WlSxfl3//5z39a/v7+1tKlS5XlY8eOtVwulzV06FDPsjfffFP5LLr93//9n+VyuawFCxZYlmV55tPUqVOV9SZOnGi5XC6rW7dunmXuedCgQQPr9OnTnuWbNm3S9jcqKsoKDg62kpOTPcuSk5OtunXrWrVq1bKuX79uWZZ5vrhfI29zWj4vy9Ln9L59+6zKlStbzZo1sxITEz3rHThwwAoODrZatmzpWdagQQMrLCxM2V7//v2Vuem2ePFiy+VyWa+88opn2VtvvWW5XC5rxowZnmUXLlzw7FPXrl21/ZXcz+3W+e1eFhoaah05csSz/NNPP/UcG289Ds+YMcNyuVzWxx9/7Fn2zDPPWJUrV7b27NmjPJ48tluW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yejdIyIiokyIN4yJiIiIiIiIiIiICAAzjImIiIiIiIiIiIjoJt4wJiIiIiIiIiIiIiIAvGFMRERERERERERERDfxhjERERERERERERERAeANYyIiIiIiIiIiIiK6iTeMiYiIiIiIiIiIiAgAbxgTERERERERERER0U28YUxEREREREREREREAHjDmIiIiIiIiIiIiIhu4g1jIiIiIiIiIiIiIgLAG8ZEREREREREREREdBNvGBMRERERERERERERAN4wJiIiIiIiIiIiIqKbeMOYiIiIiIiIiIiIiAAAWb39Y5YsWf6u/aAMYlnWX7Lde2nu+Pj4aMvCw8OVesmSJXf8OKGhoUp9/vx5bZ34+Pg7fpy/y4Mwd+S+yOfcqFEjbcwrr7yi1L///rtSFy9eXKn37NmjbSNv3rxKXaBAAaW+cuWKNqZChQpKHRUVpa2TWTwIc0cqUqSIUj///PPaOufOnVPqixcvet2mXB/QX9uHH35YqbNnz66NSUxMVOrly5crdWpqqtf9+Dtlprnz0EPq/3O/fv16mrd7t55PrVq1lDpPnjxKLd93OS9McuTIodQnT57U1lmxYoXTXcxwmWnuZBT52QaAq1evKvXly5eVOmfOnEp94MABbRtynWLFiim16XpHzkH5eWrRooU2JqM8CHPH7nrHRF6bnDlzRqkrVqyo1IULF9a2ce3aNaW+dOmSUm/fvt12PzKzB2HuyM+u3Df5Hpt069ZNqWvXrq3UWbPqtyzkfNu1a5dSjx492vZx0zPv7baR3u38FdswyUxzh/4af8Xc4by5/91u3vAXxkREREREREREREQEgDeMiYiIiIiIiIiIiOimLJaX36zzp+f3v/vtz13kn0UCwKuvvqrUnTt3Vmr5J3WA/ufjKSkpSl2wYME075v8MzvTn5vLP9v69ddflfr777/XxsyfPz/N+3I33G9zx8TuT85XrlypjXnsscfS9BhJSUnasty5cyu1/FM8OR9NY1q1aqXUc+bMSdN+/ZUehLkj9ezZU6mHDRumrfPnn38q9bFjx5Raxo4cPnxY28Yff/yh1AEBAUotj0MAsHjxYqXeunWrUo8fP14bk1Ey09xJzxgn+y9jkho2bKjUMt4IAJ544gmljouL8/q4MvYGAAoVKqTUp06dUupcuXJpY2SswOzZs5V61qxZ2piEhARt2d8hM82dv0u+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8803C7+nuvqdjh07Oj148OBwzJprruk029t3330XatgfkBo1aoTPitpBKay44opOL7bYYk5/+umnoeaee+5xmm00uy62t1KeIdtgv379CmsWX3xxp3/99dfCGrKgxqwtt9wyHPPSSy9VeI42bdqEz5544olKX0v37t2dvvTSS53O7sHVV1/tNN9lzjUPPvjgcA6+P8OGDXP69ttvDzV8hu3bt3d6+PDhoYbHPPDAA+EYwrnxiSeeWFjDcfrOO+8srCkHth3OU8zMbrzxRqfXWWcdpydPnhxqzj77bKc5ro0ePTrUbLDBBk43bdrU6TvuuCPU8F7yXu++++5Ocy1nFtsT3/VZs2aFmuqgnPeW8yyzeL0Lqt/ZeOONwzGvv/6605zTlTIPLodFFvHbC8suu2w45ssvv3Saa8BVVlnF6T333DOcg3P99dZbz+nDDz+88Fr5DLP2xmO4hhoyZEioadmypdMc67P+fa211nL6/fffT674r1PKXJn9QSljO+f/HDt69eoVaurXr+90NjcpgvMdtq2Mov2EjKK9qKWXXjrU7Lfffk5nc3/CPrF///6FNRzrS/k9lYXv8aabbhqO4dqH+3NjxowJNewj//Uv/+9Z586dG2pWX311pzkXzebjhPuNPGcp3HTTTU4fc8wxlT4H+z6zuAfWpEkTp6dPnx5quDfANvD1118XXsufjVf6F8ZCCCGEEEIIIYQQQgghzEwbxkIIIYQQQgghhBBCCCHmsdC/K/hbmV122cXpH374IRyz4YYbOs1/mv13QosJ2kuQFVZYIXzGP3N46623nM7+7Jb/LP7zzz93ernllgs1/LNV/unuq6++Gmr458g8x8ILLxxq+Kde5VhqlEIpf+7Ca1lmmWWczv7U6/fff3eaf05Qp06dUMM/Ob/33nud7ty5c6h59913neafRlUF2Z8R8k8NaUHx1VdfhZpPPvnE6UMPPdTpgQMHhhreR/658m+//RZq+OdJkyZNCsdUBbRjyf4MesSIEU7zuZfypyi819mfOPPekrFjx4bP+P7TLoO2I/xzJbP8z9SLoDXEU0895XT2J8G0l5gxY4bTp5xySqihfQHbcfbuT5gwwelXXnklHFMV8M+i+a6Xy6KLLur0ySef7DRtHzKOOuoop7M/leSfe9FGhH9ymvUhffv2dZp9SGZNMnXqVKfr1avn9AUXXBBq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\n",
      "text/plain": [
       "<Figure size 1440x432 with 30 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axes = plt.subplots(ncols=n_classes, nrows=3, figsize=(20, 6))\n",
    "for i in range(n_classes):\n",
    "    axes[0, i].imshow(X_test[i].reshape(image_size, image_size), cmap='gray')\n",
    "    axes[0, i].axis('off')\n",
    "    \n",
    "    axes[1, i].imshow(X_test_noisy[i].reshape(image_size, image_size), cmap='gray')\n",
    "    axes[1, i].axis('off')\n",
    "\n",
    "    axes[2, i].imshow(reconstructed_images[i].reshape(image_size, image_size) , cmap='gray')\n",
    "    axes[2, i].axis('off')\n",
    "fig.suptitle('Originals, Corrupted and Reconstructed Images', fontsize=20)\n",
    "fig.tight_layout()\n",
    "fig.subplots_adjust(top=.9)\n",
    "fig.savefig(results_path / 'autoencoder_denoising', dpi=300)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:ml4t-dl]",
   "language": "python",
   "name": "conda-env-ml4t-dl-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": true,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
